package com.bbva.kyfb.kyfbutils.pau;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.bbva.jee.arq.spring.core.gce.CodigoError;
import com.bbva.kyfb.kyfbdto.firmas.errores.Errores_kyfb_servicios;

/**
 * Clase que contiene las contantes necesarias para el correcto funcionamiento del pau.
 */
public final class ConstantesPAU {

	/** Representa la cadena la cual al pasar por el pau sera sustituida por la contrasenia temporal enviada al dispositivo movil. */
	public static final String POSICION_CODIGO_OTP_SMS = "%p";


	/** KO. */
	public static final String AUT_KO = "KO";

	/** OK. */
	public static final String AUT_OK = "OK";


	/** 'T' validacion del telefono movil y 'O'para OTP. */
	public static final char XTI_TIPENV2 = 'O';

	/** Servidor PAU. */
	public static final String DES_SERVPAU = "http://ad001.igrupobbva:6316/slan/ServidorPAU/FrontalServlet";

	// CONEXION
	/** Aplicacion normal de conexion. */
	public static final String APLICACION = "0027";

	/** Codigo de aplicacion para conexion de CMP. */
	public static final String APLICACION_CMP = "EU27";

	/** Canal de conexion. */
	public static final String CANAL = "0007";

	/** Codigo de operacion. */
	public static final String OPERACION = "0020";

	/** Este codigo nos dice que el usuario por el que consultamos en el webservice existe. */
	public static final String CODRETORNO_WS = "MD0198";

	// SECUENCIAS
	/** Secuencia de un solo paso con la CA de Clave de operaciones. */
	public static final String SECUENCIA_CLAVEOP = "CLO01";

	/** Secuencia de un solo paso con la CA de Formula. */
	public static final String SECUENCIA_FORMULA = "FRM01";

	/** Secuencia CA de Clave de Operaciones + Token de Vasco. */
	public static final String SECUENCIA_CLAVEOP_VASCO = "CTK01";

	/** Secuencia CA de Clave de Operaciones + Token de Vasco para CMP. */
	public static final String SECUENCIA_CLAVEOP_VASCO_CMP = "CTK02";

	/** Secuencia CA de Formula + Token de Vasco. */
	public static final String SECUENCIA_FORMULA_VASCO = "FTK01";

	/** Secuencia CA de Formula + OTP por SMS. */
	public static final String SECUENCIA_FORMULA_OTP = "FOT01";

	/** Secuencia CA de Clave de Operaciones + OTP por SMS. */
	public static final String SECUENCIA_CLAVEOP_OTP = "COT01";

	/** Secuencia de un solo paso con la CA de OTP por SMS multiidioma. */
	public static final String SECUENCIA_OTP_MULTIIDIOMA = "SMI01";

	/** The Constant CODIGO_LITERAL_OTP_SMS_TEXTO_INICIAL. */
	public static final String CODIGO_LITERAL_OTP_SMS_TEXTO_INICIAL = "SMS1";

	/** The Constant CODIGO_LITERAL_OTP_SMS_TEXTO_FINAL. */
	public static final String CODIGO_LITERAL_OTP_SMS_TEXTO_FINAL = "SMS2";

	/** The Constant LONGITUD_MIN_NUMALEAT. */
	public static final int LONGITUD_MIN_NUMALEAT = 9;

	/** The Constant CODIGO_LITERAL_OTP_SMS_TEXTO_FINAL. */
	public static final int LONGITUD_MAX_NUMALEAT = 9;

	/*
	 * FDS
	 */
	// SECUENCIA
	/** The Constant SECUENCIA_FDS. */
	public static final String SECUENCIA_FDS = "FDS01";

	// CONEXION PARA FDS
	/** Aplicacion normal de conexion fds. */
	public static final String APLICACION_FDS = "0001";

	/** Canal de conexion fds. */
	public static final String CANAL_FDS = "0007";

	/** Codigo de operacion fds. */
	public static final String OPERACION_FDS = "0020";

	// INTERFACES FDS
	/** The Constant INTERFAZ_TP. */
	public static final String INTERFAZ_TP = "TP";

	// VARIABLES
	/** The Constant APPLICATION. */
	public static final String APPLICATION = "bbvanet";

	/** The Constant TYPE. */
	public static final String TYPE = "eu_transfer";

	/** The Constant SIGNATURE_TYPE. */
	public static final String SIGNATURE_TYPE = "opkey";

	/** The Constant TRANSFER_CATEGORY. */
	public static final String TRANSFER_CATEGORY = "wire_transfer";

	//RESULTADO
	/** The Constant OPERACION_CORRECTA. */
	public static final String OPERACION_CORRECTA_FDS = "0";


	/*
	 * MAPA ERRORES PAU
	 */

	/** Este mapa sirve para administrar los errores lanzados por el PAU Esta formado de la siguiente manera: clave:	sera una cadena compuesto del error lanzado por PAU + la secuencia que lo lanza por ejemplo VAC0011 + CTK01 => VAC0011CTK01 valor:	sera un objeto de tipo CodigoError definido en Errores_kyfb_servicios Se permite al mapa devolver un valor por defecto en caso de no encontrar la clave. */
	public static final Map<String, CodigoError> erroresPAUMap = Collections.unmodifiableMap(
			new HashMap<String, CodigoError>() {
				/**
				 * 
				 */
				private static final long serialVersionUID = -8901330198066291055L;
				/**{@inheritDoc}
				 * @see java.util.HashMap#get(java.lang.Object)
				 */
				@Override
				public CodigoError get(final Object key) {
					final CodigoError resp;
					if(! containsKey(key)) {
						/* Si no se ha definido el error del pau para la secuencia
						 * devolvera este por defecto */
						resp = Errores_kyfb_servicios.ERROR_PAU_NO_DEFINIDO;
					} else {
						resp = super.get(key);
					}
					return resp;
				}{
					put("VAC0011CTK01", Errores_kyfb_servicios.CLAVE_NO_DEFINIDA);
					put("VAC0011FOT01", Errores_kyfb_servicios.CLAVE_NO_DEFINIDA);
					put("VAC0002CTK01", Errores_kyfb_servicios.CLAVE_BLOQUEADA_POR_REINTENTOS);
					put("VAC0002FOT01", Errores_kyfb_servicios.CLAVE_BLOQUEADA_POR_REINTENTOS);
					put("FRM0002CTK01", Errores_kyfb_servicios.CLAVE_BLOQUEADA_POR_REINTENTOS);
					put("FRM0002FOT01", Errores_kyfb_servicios.CLAVE_BLOQUEADA_POR_REINTENTOS);
					put("PAU0002COT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("PAU0002FOT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("PAU0009COT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("PAU0009FOT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0011COT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0011FOT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0014COT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0014FOT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0017COT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0017FOT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("CLO0017COT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("CLO0017FOT01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0015COT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0015FOT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0022COT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0022FOT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0013COT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0013FOT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("CLO0014COT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("CLO0014FOT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("CLO0011COT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("CLO0011FOT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("CLO0015COT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("CLO0015FOT01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("CLO0010COT01", Errores_kyfb_servicios.CLAVE_BLOQUEADA);
					put("CLO0010FOT01", Errores_kyfb_servicios.CLAVE_BLOQUEADA);
					put("FRM0010COT01", Errores_kyfb_servicios.FORMULA_BLOQUEADA);
					put("FRM0010FOT01", Errores_kyfb_servicios.FORMULA_BLOQUEADA);
					put("CLO0013COT01", Errores_kyfb_servicios.CLAVE_NO_DEFINIDA);
					put("CLO0013FOT01", Errores_kyfb_servicios.CLAVE_NO_DEFINIDA);
					put("FRM0002COT01", Errores_kyfb_servicios.CLAVE_NO_DEFINIDA);
					put("CLO0002COT01", Errores_kyfb_servicios.CLAVE_NO_DEFINIDA);
					put("CLO0002FOT01", Errores_kyfb_servicios.CLAVE_NO_DEFINIDA);
					put("FRM0005CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0006CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0007CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0008CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("VAC0005CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("VAC0006CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("VAC0007CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("VAC0008CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("PAU0002CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("PAU0009CTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0005FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0006FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0007FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("FRM0008FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("VAC0005FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("VAC0006FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("VAC0007FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("VAC0008FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("PAU0002FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("PAU0009FTK01", Errores_kyfb_servicios.ERROR_VALIDACION_CREDENCIALES);
					put("VAC0000CTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("VAC0001CTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("VAC0003CTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("VAC0004CTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("FRM0000CTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("FRM0003CTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("FRM0004CTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("VAC0002FTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("FRM0002FTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("VAC0000FTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("VAC0001FTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("VAC0003FTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("VAC0004FTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("FRM0000FTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("FRM0003FTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("FRM0004FTK01", Errores_kyfb_servicios.DISPOSITIVO_SEGURIDAD_BLOQUEADO);
					put("VAC0013CTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("VAC0014CTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("VAC0015CTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0013CTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0014CTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0015CTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("VAC0013FTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("VAC0014FTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("VAC0015FTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0013FTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0014FTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0015FTK01", Errores_kyfb_servicios.CREDENCIALES_INCORRECTAS);
					put("FRM0010CTK01", Errores_kyfb_servicios.FORMULA_BLOQUEADA);
					put("FRM0010FTK01", Errores_kyfb_servicios.FORMULA_BLOQUEADA);
					put("CLO0010FTK01", Errores_kyfb_servicios.CLAVE_BLOQUEADA);
					put("VAC0010FTK01", Errores_kyfb_servicios.CLAVE_BLOQUEADA);
					put("CLO0010CTK01", Errores_kyfb_servicios.CLAVE_BLOQUEADA);
					put("VAC0010CTK01", Errores_kyfb_servicios.CLAVE_BLOQUEADA);
					put("VAC0011FTK01", Errores_kyfb_servicios.CLAVE_NO_DEFINIDA);
				}}

			);



}
